use core::registry::PackageRegistry;
-use core::source::Source;
+use core::{Source, PackageId};
use ops;
use sources::PathSource;
-use util::{CargoResult, Config};
+use util::{CargoResult, Config, human, ChainError};
/// Executes `cargo fetch`.
pub fn fetch(manifest_path: &Path, config: &Config) -> CargoResult<()> {
let package = try!(source.root_package());
let mut registry = PackageRegistry::new(config);
- try!(ops::resolve_pkg(&mut registry, &package));
+ let resolve = try!(ops::resolve_pkg(&mut registry, &package));
+
+ let ids: Vec<PackageId> = resolve.iter().cloned().collect();
+ try!(registry.get(&ids).chain_error(|| {
+ human("unable to get packages from source")
+ }));
Ok(())
}
dir = p.url()).as_slice()));
});
+
+test!(fetch_downloads {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [project]
+ name = "foo"
+ version = "0.5.0"
+ authors = []
+
+ [dependencies]
+ a = "0.1.0"
+ "#)
+ .file("src/main.rs", "fn main() {}");
+ p.build();
+
+ r::mock_pkg("a", "0.1.0", &[]);
+
+ assert_that(p.process(cargo_dir().join("cargo")).arg("fetch"),
+ execs().with_status(0)
+ .with_stdout(format!("\
+{updating} registry `[..]`
+{downloading} a v0.1.0 (registry [..])
+", updating = UPDATING, downloading = DOWNLOADING)));
+});